package com.alan.springbootbase.utils;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.params.SetParams;

@Component
public class RedisUtil {

        @Autowired
        private JedisPool jedisPool;

        /**
         * 向Redis中存值，永久有效
         */
        public String set(String key, String value) {
            Jedis jedis = null;
            try {
                jedis = jedisPool.getResource();
                return jedis.set(key, value);
            } catch (Exception e) {
                return "0";
            } finally {
                jedis.close();
            }
        }

        /**
         * 向Redis中存值，永久有效
         */
        public String set(String key, String value,int time) {
            Jedis jedis = null;
            try {
                jedis = jedisPool.getResource();
                jedis.set(key, value);
                return jedis.expire(key,time).toString();
            } catch (Exception e) {
                return "0";
            } finally {
                jedis.close();
            }
        }

        /**
         * 根据传入Key获取指定Value
         */
        public String get(String key) {
            Jedis jedis = null;
            String value;
            try {
                jedis = jedisPool.getResource();
                value = jedis.get(key);
            } catch (Exception e) {
                return "0";
            } finally {
                jedis.close();
            }
            return value;
        }

        /**
         * 校验Key值是否存在
         */
        public Boolean exists(String key) {
            Jedis jedis = null;
            try {
                jedis = jedisPool.getResource();
                return jedis.exists(key);
            } catch (Exception e) {
                return false;
            } finally {
                jedis.close();
            }
        }

        /**
         * 删除指定Key-Value
         */
        public Long del(String key) {
            Jedis jedis = null;
            try {
                jedis = jedisPool.getResource();
                return jedis.del(key);
            } catch (Exception e) {
                return 0L;
            } finally {
                jedis.close();
            }
        }

        /**
         * 分布式锁
         * @param key
         * @param value
         * @param time 锁的超时时间，单位：秒
         *
         * @return 获取锁成功返回"OK"，失败返回null
         */
        public String getDistributedLock(String key,String value,int time){
            Jedis jedis = null;
            String ret = "";
            try {
                jedis = jedisPool.getResource();
                ret = jedis.set(key, value, new SetParams().nx().ex(time));
                return ret;
            } catch (Exception e) {
                return null;
            } finally {
                jedis.close();
            }
        }

}
